/**
 * 压缩包索引管理器 - 实现智能命名
 */
const fs = require('fs-extra');
const path = require('path');

class PackageIndexManager {
  constructor() {
    this.indexFile = path.join(__dirname, '../../data/package-index.json');
    this.indexes = {};
    this.loadIndexes();
  }

  /**
   * 加载索引数据
   */
  async loadIndexes() {
    try {
      await fs.ensureDir(path.dirname(this.indexFile));
      if (await fs.pathExists(this.indexFile)) {
        this.indexes = await fs.readJson(this.indexFile);
      }
    } catch (error) {
      console.warn('加载包索引失败，使用默认值:', error.message);
      this.indexes = {};
    }
  }

  /**
   * 保存索引数据
   */
  async saveIndexes() {
    try {
      await fs.ensureDir(path.dirname(this.indexFile));
      await fs.writeJson(this.indexFile, this.indexes, { spaces: 2 });
    } catch (error) {
      console.error('保存包索引失败:', error.message);
    }
  }

  /**
   * 获取平台的下一个索引
   */
  async getNextIndex(platform) {
    await this.loadIndexes(); // 确保数据是最新的
    
    if (!this.indexes[platform]) {
      this.indexes[platform] = 0;
    }
    
    this.indexes[platform]++;
    await this.saveIndexes();
    
    return this.indexes[platform];
  }

  /**
   * 生成压缩包文件名
   */
  async generatePackageName(platform, projectId) {
    const index = await this.getNextIndex(platform);
    
    // 平台名称映射
    const platformNames = {
      'h5': 'h5',
      'mp-weixin': 'weixin',
      'mp-alipay': 'alipay',
      'mp-baidu': 'baidu',
      'mp-toutiao': 'toutiao',
      'mp-qq': 'qq'
    };
    
    const platformName = platformNames[platform] || platform;
    const fileName = `${platformName}${index}.zip`;
    
    console.log(`📦 生成压缩包名称: ${fileName} (平台: ${platform}, 索引: ${index})`);
    
    return {
      fileName,
      index,
      platform: platformName,
      projectId
    };
  }

  /**
   * 重置平台索引（可选功能）
   */
  async resetPlatformIndex(platform) {
    await this.loadIndexes();
    this.indexes[platform] = 0;
    await this.saveIndexes();
    console.log(`🔄 已重置 ${platform} 平台的索引`);
  }

  /**
   * 获取所有平台的当前索引
   */
  async getAllIndexes() {
    await this.loadIndexes();
    return { ...this.indexes };
  }
}

// 创建单例实例
const packageIndexManager = new PackageIndexManager();

module.exports = packageIndexManager;
